/*?
? 十进制数转换为二进制数时，由于整数和小数的转换方法不同，所以先将十进制数的整数部分和小数部分分别转换后，再加以合并。
? 十进制整数转换为二进制整数采用"除2取余，逆序排列"法。
? 具体做法是：用2整除十进制整数，可以得到一个商和余数；再用2去除商，又会得到一个商和余数，如此进行，直到商为小于1时为止，然后把先得到的余数作为二进制数的低位有效位，后得到的余数作为二进制数的高位有效位，依次排列起来

? 十进制小数转换成二进制小数采用"乘2取整，顺序排列"法。具体做法是：用2乘十进制小数，可以得到积，将积的整数部分取出，再用2乘余下的小数部分，又得到一个积，再将积的整数部分取出，如此进行，直到积中的小数部分为零，此时0或1为二进制的最后一位。或者达到所要求的精度为止。
? 然后把取出的整数部分按顺序排列起来，先取的整数作为二进制小数的高位有效位，后取的整数作为低位有效位。
?*/


function tenToTwo(num) {
    const str = String(num)
    //? 因为小数和整数部分的处理方法不一样
    const [int, dec] = str.split('.')
    const intr = Int(int)
    const decr = decimal(dec)
    return intr + '.' +decr
}
function Int(str) {
    let num = Number(str)
    let res = ''
    while (num >= 1) {
        let yu = num % 2
        num = Math.floor(num / 2)
        res = yu + res
    }
    return res
}
function decimal(str) {
    let res = ''
    let num = Number(0 + '.' + str)
    while (num.toString().indexOf('.') !== -1 && res.length < 46) {
        let ji = num * 2
        res += Math.floor(ji)
        if (Math.floor(ji) === 1) {
            ji -= 1
        }
        num = ji
    }
    return res
}

console.log(tenToTwo(123.234));
